#ifndef FIRGAMEWND_H
#define FIRGAMEWND_H

#include <QFrame>
#include "firitem.h"
#include "client.h"

class FIRGameWnd : public QFrame //继承于QFrame
{
    Q_OBJECT

public:
    explicit FIRGameWnd(QWidget *parent = nullptr);

    void Connect(QString ip, int port, int room);        //调用客户端ConnectToServer函数，传参主窗口上的ip，端口，房间号
    void Say(QString text);                              //调用客户端SendMsg_Say函数，传参输入框的text
    void Output(QString text);                           //发送输出信号（客户端调用）
    void GetRoomState(QList<ROOM_STATE>& state);         //调用客户端GetRoomState函数，传参房间状态列表

signals:
    void sigOutput(QString text);                        //TextEdit输出text信号
    void sigUpdateRoomState();                           //更新房间状态信号

public slots:
    void slotOtherUserMove(int x, int y);                //其他玩家行动槽函数
    void slotNewGame();                                  //新游戏槽函数

protected:
    void paintEvent(QPaintEvent *);                      //重写绘图事件
    void mousePressEvent(QMouseEvent *);                 //重写鼠标按压事件

private:
    void DrawChessboard();                               //画棋盘
    void DrawItems();                                    //画棋子
    void DrawItemWithMouse();                            //画棋子鼠标
    void DrawChessAtPoint(QPainter& painter,QPoint& pt); //在棋盘上画棋子
    //统计某个方向(共8个方向)上的相连个数，用QPoint表示统计方向，如(1,1)表示右下方,（-1,0）表示向左
    int CountNearItem(FIRItem item,QPoint ptDirection);

private:
    //棋盘行、列数，以及每个单元格尺寸
    const int chessRows = 20;
    const int chessColumes = 20;
    const int rectWidth = 36;
    const int rectHeight = 36;

    Client* mClient;                //客户端
    QVector<FIRItem> mItems;        //棋子容器
    bool mBlack;                    //下一颗所下棋子的颜色，黑棋为1，白棋为0
    QPoint mPos;                    //最后落下的棋子的坐标
};

#endif // FIRGAMEWND_H
